<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script>


//【示例1】为数组下标指定负值：
var a = [];						// 定义空数组直接量
a[-1] = 1; 						// 为下标为-1的元素赋值

alert(a.length); 				// 返回值为0，说明数组长度没有增加
alert(a[-1]); 					// 返回1，说明这个元素还是存在的
alert(a["-1"]);				// 返回1，说明这个值以对象属性的形式被存储

var a = [];
a[true] = 1;
a[false] = 0;
alert(a.length); 				// 返回值为0，说明数组长度没有增加
alert(a[true]); 				// 返回值为1
alert(a[false]); 				// 返回值为0
alert(a[0]); 					// 返回undefined
alert(a[1]); 					// 返回undefined

a["1"] = 1;
alert(a[1]); 					// 返回值为1
//【示例2】这种数据格式被称为哈希表（或称关联数组，伪数组），哈希表的数据检索速度要优于数组迭代检索。对于下面操作：
var a = [["张三",1],["李四",2],["王五",3]]; 	// 二维数组
for(var i in a){ 							// 遍历二维数组
    if(a[i][0] == "李四") alert(a[i][1]) ; 	// 检索指定元素
}

var a = [];								// 定义空数组
a["张三"] = 1; 							// 以文本下标来存储元素的值
a["李四"] = 2;
a["王五"] = 3;
alert(a["李四"] ); 						// 快速定位检索
//【示例3】JavaScript不支持二维数组，用户可以模仿二维数组的语法格式来定义数组。下面写法在语法上虽然不符合规定，但是JavaScript不会提示编译错误：
var a = [];
a[0,0] = 1;
a[0,1] = 2;
a[1,0] = 3;
a[1,1] = 4;

alert(a.length); 						// 返回2，说明仅有两个元素有效
alert(a[0]); 							// 返回3
alert(a[1]); 							// 返回3

var a = [], i = 1;			 			// 初始化变量
while( i < 10 ){ 						// 指定循环次数
    a[i *= 2 , i] = i; 					// 指定下标为2的幂数时才进行赋值
}
alert( a.length ); 				// 返回17
alert( a ); 					// 返回数组[,,2,, 4,,,, 8,,,,,,,, 16]
//【示例4】对象也可以作为数组下标，JavaScript会试图把对象转换为数值，如果不行，则把它转换为字符串，然后以文本下标的形式进行操作。
var a = [];						// 数组直接量
var b = function(){			// 函数直接量
    return 2;
}
a[b] = 1; 						// 把对象作为数组下标
alert( a.length ); 				// 返回长度为0
alert( a[b] ); 					// 返回1

var s =b.toString();			// 获取对象的字符串
alert( a[s] ); 					// 利用文本下标读取元素的值

a[b()] = 1; 					// 在下标处调用函数，则返回值为2
alert( a[2] ); 					// 所以可以使用2来读取该元素值


</script>
</head>
<body>




</body>
</html>
